package com.zy.util;

import com.zy.pojo.Salary;
import com.zy.service.SalaryService;
import com.zy.service.impl.SalaryServiceImpl;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Random;

/**
 * Created with IntelliJ IDEA.
 * User: xiaoqi
 * Date: 2021/4/19
 * Time: 下午 14:54
 * Description: 生成数据
 * From: www.baidu.com
 */
public class GenerateData {
    static String familyName = "赵钱孙李周吴郑王冯陈褚卫蒋沈韩杨朱秦尤许何吕施张孔曹严华金魏陶姜戚谢邹喻水云苏潘葛奚范彭郎鲁韦昌马苗凤花方俞任袁柳鲍史唐费岑薛雷贺倪汤滕殷罗毕郝邬安常乐于时傅卞齐康伍余元卜顾孟平"
            + "黄和穆萧尹姚邵湛汪祁毛禹狄米贝明臧计成戴宋茅庞熊纪舒屈项祝董粱杜阮席季麻强贾路娄危江童颜郭梅盛林刁钟徐邱骆高夏蔡田胡凌霍万柯卢莫房缪干解应宗丁宣邓郁单杭洪包诸左石崔吉"
            + "龚程邢滑裴陆荣翁荀羊甄家封芮储靳邴松井富乌焦巴弓牧隗山谷车侯伊宁仇祖武符刘景詹束龙叶幸司韶黎乔苍双闻莘劳逄姬冉宰桂牛寿通边燕冀尚农温庄晏瞿茹习鱼容向古戈终居衡步都耿满弘国文东殴沃曾关红游盖益桓公晋楚闫";
    static String firstName2 = "欧阳太史端木上官司马东方独孤南宫万俟闻人夏侯诸葛尉迟公羊赫连澹台皇甫宗政濮阳公冶太叔申屠公孙慕容仲孙钟离长孙宇文司徒鲜于司空闾丘子车亓官司寇巫马公西颛孙壤驷公良漆雕乐正宰父谷梁拓跋夹谷轩辕令狐段干百里呼延东郭南门羊舌微生公户公玉公仪梁丘公仲公上公门公山公坚左丘公伯西门公祖第五公乘贯丘公皙南荣东里东宫仲长子书子桑即墨达奚褚师吴铭";
    static String girlName = "秀娟英华慧巧美娜静淑惠珠翠雅芝玉萍红娥玲芬芳燕彩春菊兰凤洁梅琳素云莲真环雪荣爱妹霞香月莺媛艳瑞凡佳嘉琼勤珍贞莉桂娣叶璧璐娅琦晶妍茜秋珊莎锦黛青倩婷姣婉娴瑾颖露瑶怡婵雁蓓纨仪荷丹蓉眉君琴蕊薇菁梦岚苑婕馨瑗琰韵融园艺咏卿聪澜纯毓悦昭冰爽琬茗羽希宁欣飘育滢馥筠柔竹霭凝晓欢霄枫芸菲寒伊亚宜可姬舒影荔枝思丽";
    static String boyName = "伟刚勇毅俊峰强军平保东文辉力明永健世广志义兴良海山仁波宁贵福生龙元全国胜学祥才发武新利清飞彬富顺信子杰涛昌成康星光天达安岩中茂进林有坚和彪博诚先敬震振壮会思群豪心邦承乐绍功松善厚庆磊民友裕河哲江超浩亮政谦亨奇固之轮翰朗伯宏言若鸣朋斌梁栋维启克伦翔旭鹏泽晨辰士以建家致树炎德行时泰盛雄琛钧冠策腾楠榕风航弘";

    public static String randFamilyName() {
        String str = "";
        int strLen;
        int randNum = new Random().nextInt(2) + 1;
        int index;
        if (randNum == 1) {
            strLen = familyName.length();
            index = new Random().nextInt(strLen);
            str = String.valueOf(familyName.charAt(index));
        } else {
            strLen = firstName2.length();
            index = new Random().nextInt(strLen);
            if (index % 2 == 0) {
                str = firstName2.substring(index, index + 2);
            } else {
                str = firstName2.substring(index - 1, index + 1);
            }
        }
        return str;
    }

    public static String randSex() {
        int randNum = new Random().nextInt(2) + 1;
        return randNum == 1 ? "男" : "女";
    }

    public static String randRole() {
        int randNum = new Random().nextInt(2) + 1;
        return randNum == 1 ? "管理员" : "普通员工";
    }

    public static Integer randDepartmentId() {
        return new Random().nextInt(12) + 1;
    }

    public static String randName(String sex) {
        String name = "";
        int randNum = new Random().nextInt(2) + 1;
        int index;
        if (sex.equals("男")) {
            int strLen = boyName.length();
            if (randNum % 2 == 0) {
                index = new Random().nextInt(strLen - 1);
                name = boyName.substring(index, index + randNum).concat("-男");
            } else {
                index = new Random().nextInt(strLen);
                name = boyName.substring(index, index + randNum).concat("-男");
            }
        } else {
            int strLen = girlName.length();
            if (randNum % 2 == 0) {
                index = new Random().nextInt(strLen - 1);
                name = girlName.substring(index, index + randNum).concat("-女");
            } else {
                index = new Random().nextInt(strLen);
                name = girlName.substring(index, index + randNum).concat("-女");
            }
        }
        return name;
    }

    public static int randAge() {
        return new Random().nextInt(4) + 18;
    }

    //定一个静态方法，专门生成单个的号码
    public static String getPhoneNum() {
        //给予真实的初始号段，号段是在百度上面查找的真实号段
        String[] start = {"133", "149", "153", "173", "177",
                "180", "181", "189", "199", "130", "131", "132",
                "145", "155", "156", "166", "171", "175", "176", "185", "186", "166", "134", "135",
                "136", "137", "138", "139", "147", "150", "151", "152", "157", "158", "159", "172",
                "178", "182", "183", "184", "187", "188", "198", "170", "171"};

        //随机出真实号段   使用数组的length属性，获得数组长度，
        //通过Math.random（）*数组长度获得数组下标，从而随机出前三位的号段
        String phoneFirstNum = start[(int) (Math.random() * start.length)];
        //随机出剩下的8位数
        String phoneLastNum = "";
        //定义尾号，尾号是8位
        final int LENPHONE = 8;
        //循环剩下的位数
        for (int i = 0; i < LENPHONE; i++) {
            //每次循环都从0~9挑选一个随机数
            phoneLastNum += (int) (Math.random() * 10);
        }
        //最终将号段和尾数连接起来
        return phoneFirstNum + phoneLastNum;
    }

    public static Date getBirthday() {
        GregorianCalendar gc = new GregorianCalendar();
        int year = randBetween(1980, 2021);
        gc.set(gc.YEAR, year);
        int dayOfYear = randBetween(1, gc.getActualMaximum(gc.DAY_OF_YEAR));
        gc.set(gc.DAY_OF_YEAR, dayOfYear);
        String dateStr = gc.get(gc.YEAR) + "-" + (gc.get(gc.MONTH) + 1) + "-" + gc.get(gc.DAY_OF_MONTH);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd");
        try {
            return sdf.parse(dateStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static int randBetween(int start, int end) {
        return start + (int) Math.round(Math.random() * (end - start));
    }

    public static Integer randMoney() {
        Random random = new Random();
        return random.nextInt(200000 - 6000 + 1) + 6000;
    }

    public static String getRandImg() {
        String[] arr = new String[]{
                "img_1000.jpg", "img_1001.jpg", "img_1002.jpg", "img_1003.jpg", "img_1004.jpg", "img_1005.jpg"
        };

        Random random = new Random();
        int index = random.nextInt(6);

        return arr[index];
    }

    public static void main(String[] args) {
        /*for (int i = 0; i < 1500; i++) {
            Employee employee = new Employee();
            String familyName = randFamilyName();
            // 名字依托于性别产生
            String randName = randName(randSex());
            String[] fixed = randName.split("-");
            employee.setName(familyName + fixed[0]);
            Role role = new Role();
            role.setRoleName(randRole());
            employee.setRole(role);
            employee.setDepartmentId(randDepartmentId());
            employee.setPhone(getPhoneNum());
            employee.setPassword(employee.getPhone().substring(5));
            employee.setEmail(employee.getPhone() + "@163.com");
            employee.setImg(getRandImg());
            employee.setEnterDate(getBirthday());
            EmployeeServiceImpl employeeService = new EmployeeServiceImpl();
            employeeService.insertEmployee(employee);
        }*/

        for (int i = 0; i < 1500; i++) {
            Salary salary = new Salary();
            salary.setEmpId(i + 1);
            salary.setMoney(Double.valueOf(randMoney()));
            SalaryServiceImpl salaryService = new SalaryServiceImpl();
            salaryService.insertSalary(salary);
        }
    }

}